// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google People API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/people/'>Google People API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170315 (804)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/people/'>
 *              https://developers.google.com/people/</a>
 *      <tr><th>Discovery Name<td>people
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google People API can be found at
 * <a href='https://developers.google.com/people/'>https://developers.google.com/people/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.People.v1
{
    /// <summary>The People Service.</summary>
    public class PeopleService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public PeopleService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public PeopleService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            people = new PeopleResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "people"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://people.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google People API.</summary>
        public class Scope
        {
            /// <summary>Manage your contacts</summary>
            public static string Contacts = "https://www.googleapis.com/auth/contacts";

            /// <summary>View your contacts</summary>
            public static string ContactsReadonly = "https://www.googleapis.com/auth/contacts.readonly";

            /// <summary>Know the list of people in your circles, your age range, and language</summary>
            public static string PlusLogin = "https://www.googleapis.com/auth/plus.login";

            /// <summary>View your street addresses</summary>
            public static string UserAddressesRead = "https://www.googleapis.com/auth/user.addresses.read";

            /// <summary>View your complete date of birth</summary>
            public static string UserBirthdayRead = "https://www.googleapis.com/auth/user.birthday.read";

            /// <summary>View your email addresses</summary>
            public static string UserEmailsRead = "https://www.googleapis.com/auth/user.emails.read";

            /// <summary>View your phone numbers</summary>
            public static string UserPhonenumbersRead = "https://www.googleapis.com/auth/user.phonenumbers.read";

            /// <summary>View your email address</summary>
            public static string UserinfoEmail = "https://www.googleapis.com/auth/userinfo.email";

            /// <summary>View your basic profile info</summary>
            public static string UserinfoProfile = "https://www.googleapis.com/auth/userinfo.profile";

        }



        private readonly PeopleResource people;

        /// <summary>Gets the People resource.</summary>
        public virtual PeopleResource People
        {
            get { return people; }
        }
    }

    ///<summary>A base abstract class for People requests.</summary>
    public abstract class PeopleBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new PeopleBaseServiceRequest instance.</summary>
        protected PeopleBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes People parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "people" collection of methods.</summary>
    public class PeopleResource
    {
        private const string Resource = "people";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PeopleResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            connections = new ConnectionsResource(service);

        }

        private readonly ConnectionsResource connections;

        /// <summary>Gets the Connections resource.</summary>
        public virtual ConnectionsResource Connections
        {
            get { return connections; }
        }

        /// <summary>The "connections" collection of methods.</summary>
        public class ConnectionsResource
        {
            private const string Resource = "connections";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ConnectionsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Provides a list of the authenticated user's contacts merged with any linked profiles.</summary>
            /// <param name="resourceName">The resource name to return connections for. Only `people/me` is valid.</param>
            public virtual ListRequest List(string resourceName)
            {
                return new ListRequest(service, resourceName);
            }

            /// <summary>Provides a list of the authenticated user's contacts merged with any linked profiles.</summary>
            public class ListRequest : PeopleBaseServiceRequest<Google.Apis.People.v1.Data.ListConnectionsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string resourceName)
                    : base(service)
                {
                    ResourceName = resourceName;
                    InitParameters();
                }


                /// <summary>The resource name to return connections for. Only `people/me` is valid.</summary>
                [Google.Apis.Util.RequestParameterAttribute("resourceName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ResourceName { get; private set; }

                /// <summary>The order in which the connections should be sorted. Defaults to
                /// `LAST_MODIFIED_ASCENDING`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("sortOrder", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<SortOrderEnum> SortOrder { get; set; }

                /// <summary>The order in which the connections should be sorted. Defaults to
                /// `LAST_MODIFIED_ASCENDING`.</summary>
                public enum SortOrderEnum
                {
                    [Google.Apis.Util.StringValueAttribute("LAST_MODIFIED_ASCENDING")]
                    LASTMODIFIEDASCENDING,
                    [Google.Apis.Util.StringValueAttribute("FIRST_NAME_ASCENDING")]
                    FIRSTNAMEASCENDING,
                    [Google.Apis.Util.StringValueAttribute("LAST_NAME_ASCENDING")]
                    LASTNAMEASCENDING,
                }

                /// <summary>Whether the response should include a sync token, which can be used to get all changes
                /// since the last request.</summary>
                [Google.Apis.Util.RequestParameterAttribute("requestSyncToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> RequestSyncToken { get; set; }

                /// <summary>The token of the page to be returned.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The number of connections to include in the response. Valid values are between 1 and 500,
                /// inclusive. Defaults to 100.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>Comma-separated list of fields to be included in the response. Omitting this field will
                /// include all fields except for connections.list requests, which have a default mask that includes
                /// common fields like metadata, name, photo, and profile url. Each path should start with `person.`:
                /// for example, `person.names` or `person.photos`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("requestMask.includeField", Google.Apis.Util.RequestParameterType.Query)]
                public virtual object RequestMaskIncludeField { get; set; }

                /// <summary>A sync token, returned by a previous call to `people.connections.list`. Only resources
                /// changed since the sync token was created will be returned.</summary>
                [Google.Apis.Util.RequestParameterAttribute("syncToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string SyncToken { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/{+resourceName}/connections"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "resourceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resourceName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^people/[^/]+$",
                        });
                    RequestParameters.Add(
                        "sortOrder", new Google.Apis.Discovery.Parameter
                        {
                            Name = "sortOrder",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "requestSyncToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "requestSyncToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "requestMask.includeField", new Google.Apis.Discovery.Parameter
                        {
                            Name = "requestMask.includeField",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "syncToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "syncToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Provides information about a person resource for a resource name. Use `people/me` to indicate the
        /// authenticated user.</summary>
        /// <param name="resourceName">The resource name of the person to provide information about.
        ///
        /// - To get information about the authenticated user, specify `people/me`. - To get information about any user, specify
        /// the resource name that   identifies the user, such as the resource names returned by
        /// [`people.connections.list`](/people/api/rest/v1/people.connections/list).</param>
        public virtual GetRequest Get(string resourceName)
        {
            return new GetRequest(service, resourceName);
        }

        /// <summary>Provides information about a person resource for a resource name. Use `people/me` to indicate the
        /// authenticated user.</summary>
        public class GetRequest : PeopleBaseServiceRequest<Google.Apis.People.v1.Data.Person>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string resourceName)
                : base(service)
            {
                ResourceName = resourceName;
                InitParameters();
            }


            /// <summary>The resource name of the person to provide information about.
            ///
            /// - To get information about the authenticated user, specify `people/me`. - To get information about any
            /// user, specify the resource name that identifies the user, such as the resource names returned by
            /// [`people.connections.list`](/people/api/rest/v1/people.connections/list).</summary>
            [Google.Apis.Util.RequestParameterAttribute("resourceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ResourceName { get; private set; }

            /// <summary>Comma-separated list of fields to be included in the response. Omitting this field will include
            /// all fields except for connections.list requests, which have a default mask that includes common fields
            /// like metadata, name, photo, and profile url. Each path should start with `person.`: for example,
            /// `person.names` or `person.photos`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("requestMask.includeField", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object RequestMaskIncludeField { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resourceName}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resourceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resourceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^people/[^/]+$",
                    });
                RequestParameters.Add(
                    "requestMask.includeField", new Google.Apis.Discovery.Parameter
                    {
                        Name = "requestMask.includeField",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Provides information about a list of specific people by specifying a list of requested resource
        /// names. Use `people/me` to indicate the authenticated user.</summary>
        public virtual GetBatchGetRequest GetBatchGet()
        {
            return new GetBatchGetRequest(service);
        }

        /// <summary>Provides information about a list of specific people by specifying a list of requested resource
        /// names. Use `people/me` to indicate the authenticated user.</summary>
        public class GetBatchGetRequest : PeopleBaseServiceRequest<Google.Apis.People.v1.Data.GetPeopleResponse>
        {
            /// <summary>Constructs a new GetBatchGet request.</summary>
            public GetBatchGetRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>Comma-separated list of fields to be included in the response. Omitting this field will include
            /// all fields except for connections.list requests, which have a default mask that includes common fields
            /// like metadata, name, photo, and profile url. Each path should start with `person.`: for example,
            /// `person.names` or `person.photos`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("requestMask.includeField", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object RequestMaskIncludeField { get; set; }

            /// <summary>The resource name, such as one returned by
            /// [`people.connections.list`](/people/api/rest/v1/people.connections/list), of one of the people to
            /// provide information about. You can include this parameter up to 50 times in one request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resourceNames", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> ResourceNames { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getBatchGet"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/people:batchGet"; }
            }

            /// <summary>Initializes GetBatchGet parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "requestMask.includeField", new Google.Apis.Discovery.Parameter
                    {
                        Name = "requestMask.includeField",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "resourceNames", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resourceNames",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.People.v1.Data
{    

    /// <summary>A person's physical address. May be a P.O. box or street address. All fields are optional.</summary>
    public class Address : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The city of the address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("city")]
        public virtual string City { get; set; } 

        /// <summary>The country of the address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; } 

        /// <summary>The [ISO 3166-1 alpha-2](http://www.iso.org/iso/country_codes.htm) country code of the
        /// address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; } 

        /// <summary>The extended address of the address; for example, the apartment number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("extendedAddress")]
        public virtual string ExtendedAddress { get; set; } 

        /// <summary>The read-only type of the address translated and formatted in the viewer's account locale or the
        /// `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>The unstructured value of the address. If this is not set by the user it will be automatically
        /// constructed from structured values.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedValue")]
        public virtual string FormattedValue { get; set; } 

        /// <summary>Metadata about the address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The P.O. box of the address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("poBox")]
        public virtual string PoBox { get; set; } 

        /// <summary>The postal code of the address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCode")]
        public virtual string PostalCode { get; set; } 

        /// <summary>The region of the address; for example, the state or province.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>The street address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streetAddress")]
        public virtual string StreetAddress { get; set; } 

        /// <summary>The type of the address. The type can be custom or predefined. Possible values include, but are not
        /// limited to, the following:
        ///
        /// * `home` * `work` * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's age range.</summary>
    public class AgeRangeType : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The age range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ageRange")]
        public virtual string AgeRange { get; set; } 

        /// <summary>Metadata about the age range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's short biography.</summary>
    public class Biography : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The content type of the biography.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentType")]
        public virtual string ContentType { get; set; } 

        /// <summary>Metadata about the biography.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The short biography.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's birthday. At least one of the `date` and `text` fields are specified. The `date` and `text`
    /// fields typically represent the same date, but are not guaranteed to.</summary>
    public class Birthday : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The date of the birthday.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual Date Date { get; set; } 

        /// <summary>Metadata about the birthday.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>A free-form string representing the user's birthday.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("text")]
        public virtual string Text { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's bragging rights.</summary>
    public class BraggingRights : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the bragging rights.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The bragging rights; for example, `climbed mount everest`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Google contact group membership.</summary>
    public class ContactGroupMembership : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The contact group ID for the contact group membership. The contact group ID can be custom or
        /// predefined. Possible values include, but are not limited to, the following:
        ///
        /// *  `myContacts` *  `starred` *  A numerical ID for user-created groups.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contactGroupId")]
        public virtual string ContactGroupId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's read-only cover photo. A large image shown on the person's profile page that represents who
    /// they are or what they care about.</summary>
    public class CoverPhoto : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the cover photo is the default cover photo; false if the cover photo is a user-provided
        /// cover photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("default")]
        public virtual System.Nullable<bool> Default__ { get; set; } 

        /// <summary>Metadata about the cover photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The URL of the cover photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a whole calendar date, for example a date of birth. The time of day and time zone are either
    /// specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian
    /// Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The day may be 0 to represent a year and
    /// month where the day is not significant. The year may be 0 to represent a month and day independent of year; for
    /// example, anniversary date.</summary>
    public class Date : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a
        /// year/month where the day is not significant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("day")]
        public virtual System.Nullable<int> Day { get; set; } 

        /// <summary>Month of year. Must be from 1 to 12.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("month")]
        public virtual System.Nullable<int> Month { get; set; } 

        /// <summary>Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("year")]
        public virtual System.Nullable<int> Year { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Google Apps Domain membership.</summary>
    public class DomainMembership : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the person is in the viewer's Google Apps domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inViewerDomain")]
        public virtual System.Nullable<bool> InViewerDomain { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's email address.</summary>
    public class EmailAddress : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The display name of the email.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The read-only type of the email address translated and formatted in the viewer's account locale or
        /// the `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the email address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The type of the email address. The type can be custom or predefined. Possible values include, but
        /// are not limited to, the following:
        ///
        /// * `home` * `work` * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The email address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An event related to the person.</summary>
    public class Event : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The date of the event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual Date Date { get; set; } 

        /// <summary>The read-only type of the event translated and formatted in the viewer's account locale or the
        /// `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The type of the event. The type can be custom or predefined. Possible values include, but are not
        /// limited to, the following:
        ///
        /// * `anniversary` * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata about a field.</summary>
    public class FieldMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the field is the primary field; false if the field is a secondary field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("primary")]
        public virtual System.Nullable<bool> Primary { get; set; } 

        /// <summary>The source of the field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>True if the field is verified; false if the field is unverified. A verified field is typically a
        /// name, email address, phone number, or website that has been confirmed to be owned by the person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verified")]
        public virtual System.Nullable<bool> Verified { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's gender.</summary>
    public class Gender : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only value of the gender translated and formatted in the viewer's account locale or the
        /// `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedValue")]
        public virtual string FormattedValue { get; set; } 

        /// <summary>Metadata about the gender.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The gender for the person. The gender can be custom or predefined. Possible values include, but are
        /// not limited to, the following:
        ///
        /// * `male` * `female` * `other` * `unknown`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class GetPeopleResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The response for each requested resource name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responses")]
        public virtual System.Collections.Generic.IList<PersonResponse> Responses { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's instant messaging client.</summary>
    public class ImClient : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only protocol of the IM client formatted in the viewer's account locale or the `Accept-
        /// Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedProtocol")]
        public virtual string FormattedProtocol { get; set; } 

        /// <summary>The read-only type of the IM client translated and formatted in the viewer's account locale or the
        /// `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the IM client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The protocol of the IM client. The protocol can be custom or predefined. Possible values include,
        /// but are not limited to, the following:
        ///
        /// * `aim` * `msn` * `yahoo` * `skype` * `qq` * `googleTalk` * `icq` * `jabber` * `netMeeting`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protocol")]
        public virtual string Protocol { get; set; } 

        /// <summary>The type of the IM client. The type can be custom or predefined. Possible values include, but are
        /// not limited to, the following:
        ///
        /// * `home` * `work` * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The user name used in the IM client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("username")]
        public virtual string Username { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>One of the person's interests.</summary>
    public class Interest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the interest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The interest; for example, `stargazing`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ListConnectionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of people that the requestor is connected to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("connections")]
        public virtual System.Collections.Generic.IList<Person> Connections { get; set; } 

        /// <summary>The token that can be used to retrieve the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The token that can be used to retrieve changes since the last request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextSyncToken")]
        public virtual string NextSyncToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's locale preference.</summary>
    public class Locale : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The well-formed [IETF BCP 47](https://tools.ietf.org/html/bcp47) language tag representing the
        /// locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's read-only membership in a group.</summary>
    public class Membership : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The contact group membership.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contactGroupMembership")]
        public virtual ContactGroupMembership ContactGroupMembership { get; set; } 

        /// <summary>The domain membership.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domainMembership")]
        public virtual DomainMembership DomainMembership { get; set; } 

        /// <summary>Metadata about the membership.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's name. If the name is a mononym, the family name is empty.</summary>
    public class Name : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only display name formatted according to the locale specified by the viewer's account or
        /// the Accept-Language HTTP header.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The read-only display name with the last name first formatted according to the locale specified by
        /// the viewer's account or the Accept-Language HTTP header.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayNameLastFirst")]
        public virtual string DisplayNameLastFirst { get; set; } 

        /// <summary>The family name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("familyName")]
        public virtual string FamilyName { get; set; } 

        /// <summary>The given name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("givenName")]
        public virtual string GivenName { get; set; } 

        /// <summary>The honorific prefixes, such as `Mrs.` or `Dr.`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("honorificPrefix")]
        public virtual string HonorificPrefix { get; set; } 

        /// <summary>The honorific suffixes, such as `Jr.`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("honorificSuffix")]
        public virtual string HonorificSuffix { get; set; } 

        /// <summary>Metadata about the name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The middle name(s).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("middleName")]
        public virtual string MiddleName { get; set; } 

        /// <summary>The family name spelled as it sounds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticFamilyName")]
        public virtual string PhoneticFamilyName { get; set; } 

        /// <summary>The full name spelled as it sounds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticFullName")]
        public virtual string PhoneticFullName { get; set; } 

        /// <summary>The given name spelled as it sounds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticGivenName")]
        public virtual string PhoneticGivenName { get; set; } 

        /// <summary>The honorific prefixes spelled as they sound.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticHonorificPrefix")]
        public virtual string PhoneticHonorificPrefix { get; set; } 

        /// <summary>The honorific suffixes spelled as they sound.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticHonorificSuffix")]
        public virtual string PhoneticHonorificSuffix { get; set; } 

        /// <summary>The middle name(s) spelled as they sound.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticMiddleName")]
        public virtual string PhoneticMiddleName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's nickname.</summary>
    public class Nickname : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the nickname.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The type of the nickname.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The nickname.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's occupation.</summary>
    public class Occupation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the occupation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The occupation; for example, `carpenter`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's past or current organization. Overlapping date ranges are permitted.</summary>
    public class Organization : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the organization is the person's current organization; false if the organization is a past
        /// organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("current")]
        public virtual System.Nullable<bool> Current { get; set; } 

        /// <summary>The person's department at the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("department")]
        public virtual string Department { get; set; } 

        /// <summary>The domain name associated with the organization; for example, `google.com`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual string Domain { get; set; } 

        /// <summary>The end date when the person left the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endDate")]
        public virtual Date EndDate { get; set; } 

        /// <summary>The read-only type of the organization translated and formatted in the viewer's account locale or
        /// the `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>The person's job description at the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobDescription")]
        public virtual string JobDescription { get; set; } 

        /// <summary>The location of the organization office the person works at.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>Metadata about the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The name of the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The phonetic name of the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneticName")]
        public virtual string PhoneticName { get; set; } 

        /// <summary>The start date when the person joined the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startDate")]
        public virtual Date StartDate { get; set; } 

        /// <summary>The symbol associated with the organization; for example, a stock ticker symbol, abbreviation, or
        /// acronym.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("symbol")]
        public virtual string Symbol { get; set; } 

        /// <summary>The person's job title at the organization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The type of the organization. The type can be custom or predefined. Possible values include, but
        /// are not limited to, the following:
        ///
        /// * `work` * `school`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about a person merged from various data sources such as the authenticated user's contacts
    /// and profile data. Fields other than IDs, metadata, and group memberships are user-edited.
    ///
    /// Most fields can have multiple items. The items in a field have no guaranteed order, but each non-empty field is
    /// guaranteed to have exactly one field with `metadata.primary` set to true. NEXT_ID: 31</summary>
    public class Person : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The person's street addresses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addresses")]
        public virtual System.Collections.Generic.IList<Address> Addresses { get; set; } 

        /// <summary>DEPRECATED(Please read person.age_ranges instead). The person's age range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ageRange")]
        public virtual string AgeRange { get; set; } 

        /// <summary>The person's age ranges.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ageRanges")]
        public virtual System.Collections.Generic.IList<AgeRangeType> AgeRanges { get; set; } 

        /// <summary>The person's biographies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("biographies")]
        public virtual System.Collections.Generic.IList<Biography> Biographies { get; set; } 

        /// <summary>The person's birthdays.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("birthdays")]
        public virtual System.Collections.Generic.IList<Birthday> Birthdays { get; set; } 

        /// <summary>The person's bragging rights.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("braggingRights")]
        public virtual System.Collections.Generic.IList<BraggingRights> BraggingRights { get; set; } 

        /// <summary>The person's cover photos.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("coverPhotos")]
        public virtual System.Collections.Generic.IList<CoverPhoto> CoverPhotos { get; set; } 

        /// <summary>The person's email addresses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("emailAddresses")]
        public virtual System.Collections.Generic.IList<EmailAddress> EmailAddresses { get; set; } 

        /// <summary>The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the resource. Used for web cache
        /// validation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The person's events.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("events")]
        public virtual System.Collections.Generic.IList<Event> Events { get; set; } 

        /// <summary>The person's genders.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genders")]
        public virtual System.Collections.Generic.IList<Gender> Genders { get; set; } 

        /// <summary>The person's instant messaging clients.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imClients")]
        public virtual System.Collections.Generic.IList<ImClient> ImClients { get; set; } 

        /// <summary>The person's interests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("interests")]
        public virtual System.Collections.Generic.IList<Interest> Interests { get; set; } 

        /// <summary>The person's locale preferences.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locales")]
        public virtual System.Collections.Generic.IList<Locale> Locales { get; set; } 

        /// <summary>The person's group memberships.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("memberships")]
        public virtual System.Collections.Generic.IList<Membership> Memberships { get; set; } 

        /// <summary>Metadata about the person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual PersonMetadata Metadata { get; set; } 

        /// <summary>The person's names.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("names")]
        public virtual System.Collections.Generic.IList<Name> Names { get; set; } 

        /// <summary>The person's nicknames.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nicknames")]
        public virtual System.Collections.Generic.IList<Nickname> Nicknames { get; set; } 

        /// <summary>The person's occupations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("occupations")]
        public virtual System.Collections.Generic.IList<Occupation> Occupations { get; set; } 

        /// <summary>The person's past or current organizations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("organizations")]
        public virtual System.Collections.Generic.IList<Organization> Organizations { get; set; } 

        /// <summary>The person's phone numbers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumbers")]
        public virtual System.Collections.Generic.IList<PhoneNumber> PhoneNumbers { get; set; } 

        /// <summary>The person's photos.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("photos")]
        public virtual System.Collections.Generic.IList<Photo> Photos { get; set; } 

        /// <summary>The person's relations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relations")]
        public virtual System.Collections.Generic.IList<Relation> Relations { get; set; } 

        /// <summary>The kind of relationship the person is looking for.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relationshipInterests")]
        public virtual System.Collections.Generic.IList<RelationshipInterest> RelationshipInterests { get; set; } 

        /// <summary>The person's relationship statuses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relationshipStatuses")]
        public virtual System.Collections.Generic.IList<RelationshipStatus> RelationshipStatuses { get; set; } 

        /// <summary>The person's residences.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("residences")]
        public virtual System.Collections.Generic.IList<Residence> Residences { get; set; } 

        /// <summary>The resource name for the person, assigned by the server. An ASCII string with a max length of 27
        /// characters. Always starts with `people/`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resourceName")]
        public virtual string ResourceName { get; set; } 

        /// <summary>The person's skills.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("skills")]
        public virtual System.Collections.Generic.IList<Skill> Skills { get; set; } 

        /// <summary>The person's taglines.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taglines")]
        public virtual System.Collections.Generic.IList<Tagline> Taglines { get; set; } 

        /// <summary>The person's associated URLs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("urls")]
        public virtual System.Collections.Generic.IList<Url> Urls { get; set; } 

    }    

    /// <summary>The read-only metadata about a person.</summary>
    public class PersonMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the person resource has been deleted. Populated only for
        /// [`connections.list`](/people/api/rest/v1/people.connections/list) requests that include a sync
        /// token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleted")]
        public virtual System.Nullable<bool> Deleted { get; set; } 

        /// <summary>Resource names of people linked to this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkedPeopleResourceNames")]
        public virtual System.Collections.Generic.IList<string> LinkedPeopleResourceNames { get; set; } 

        /// <summary>DEPRECATED(Please read person.metadata.sources.profile_metadata instead). The type of the person
        /// object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
        public virtual string ObjectType { get; set; } 

        /// <summary>Any former resource names this person has had. Populated only for
        /// [`connections.list`](/people/api/rest/v1/people.connections/list) requests that include a sync token.
        ///
        /// The resource name may change when adding or removing fields that link a contact and profile such as a
        /// verified email, verified phone number, or profile URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("previousResourceNames")]
        public virtual System.Collections.Generic.IList<string> PreviousResourceNames { get; set; } 

        /// <summary>The sources of data for the person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sources")]
        public virtual System.Collections.Generic.IList<Source> Sources { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response for a single person</summary>
    public class PersonResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[HTTP 1.1 status code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpStatusCode")]
        public virtual System.Nullable<int> HttpStatusCode { get; set; } 

        /// <summary>The person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("person")]
        public virtual Person Person { get; set; } 

        /// <summary>The original requested resource name. May be different than the resource name on the returned
        /// person.
        ///
        /// The resource name can change when adding or removing fields that link a contact and profile such as a
        /// verified email, verified phone number, or a profile URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestedResourceName")]
        public virtual string RequestedResourceName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's phone number.</summary>
    public class PhoneNumber : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only canonicalized [ITU-T
        /// E.164](https://law.resource.org/pub/us/cfr/ibr/004/itu-t.E.164.1.2008.pdf) form of the phone
        /// number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("canonicalForm")]
        public virtual string CanonicalForm { get; set; } 

        /// <summary>The read-only type of the phone number translated and formatted in the viewer's account locale or
        /// the the `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the phone number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The type of the phone number. The type can be custom or predefined. Possible values include, but
        /// are not limited to, the following:
        ///
        /// * `home` * `work` * `mobile` * `homeFax` * `workFax` * `otherFax` * `pager` * `workMobile` * `workPager` *
        /// `main` * `googleVoice` * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The phone number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's read-only photo. A picture shown next to the person's name to help others recognize the
    /// person.</summary>
    public class Photo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The URL of the photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read-only metadata about a profile.</summary>
    public class ProfileMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The profile object type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
        public virtual string ObjectType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's relation to another person.</summary>
    public class Relation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The type of the relation translated and formatted in the viewer's account locale or the locale
        /// specified in the Accept-Language HTTP header.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the relation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The name of the other person this relation refers to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("person")]
        public virtual string Person { get; set; } 

        /// <summary>The person's relation to the other person. The type can be custom or predefined. Possible values
        /// include, but are not limited to, the following values:
        ///
        /// * `spouse` * `child` * `mother` * `father` * `parent` * `brother` * `sister` * `friend` * `relative` *
        /// `domesticPartner` * `manager` * `assistant` * `referredBy` * `partner`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's read-only relationship interest .</summary>
    public class RelationshipInterest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The value of the relationship interest translated and formatted in the viewer's account locale or
        /// the locale specified in the Accept-Language HTTP header.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedValue")]
        public virtual string FormattedValue { get; set; } 

        /// <summary>Metadata about the relationship interest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The kind of relationship the person is looking for. The value can be custom or predefined. Possible
        /// values include, but are not limited to, the following values:
        ///
        /// * `friend` * `date` * `relationship` * `networking`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's read-only relationship status.</summary>
    public class RelationshipStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only value of the relationship status translated and formatted in the viewer's account
        /// locale or the `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedValue")]
        public virtual string FormattedValue { get; set; } 

        /// <summary>Metadata about the relationship status.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The relationship status. The value can be custom or predefined. Possible values include, but are
        /// not limited to, the following:
        ///
        /// * `single` * `inARelationship` * `engaged` * `married` * `itsComplicated` * `openRelationship` * `widowed` *
        /// `inDomesticPartnership` * `inCivilUnion`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's past or current residence.</summary>
    public class Residence : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the residence is the person's current residence; false if the residence is a past
        /// residence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("current")]
        public virtual System.Nullable<bool> Current { get; set; } 

        /// <summary>Metadata about the residence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The address of the residence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A skill that the person has.</summary>
    public class Skill : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the skill.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The skill; for example, `underwater basket weaving`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The source of a field.</summary>
    public class Source : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the source. Used for web cache
        /// validation. Only populated in person.metadata.sources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The unique identifier within the source type generated by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Metadata about a source of type PROFILE.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("profileMetadata")]
        public virtual ProfileMetadata ProfileMetadata { get; set; } 

        /// <summary>The source type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

    }    

    /// <summary>A read-only brief one-line description of the person.</summary>
    public class Tagline : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the tagline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The tagline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A person's associated URLs.</summary>
    public class Url : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The read-only type of the URL translated and formatted in the viewer's account locale or the
        /// `Accept-Language` HTTP header locale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedType")]
        public virtual string FormattedType { get; set; } 

        /// <summary>Metadata about the URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual FieldMetadata Metadata { get; set; } 

        /// <summary>The type of the URL. The type can be custom or predefined. Possible values include, but are not
        /// limited to, the following:
        ///
        /// * `home` * `work` * `blog` * `profile` * `homePage` * `ftp` * `reservations` * `appInstallPage`: website for
        /// a Google+ application. * `other`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
